// pages/studentInfo/studentInfo.js
import Dialog from '@vant/weapp/dialog/dialog';
import {uploadStudentInfo,getStudent,changeStudent,deleteStudent,getStudentByValue} from '../../../api/manage'
Page({

  /**
   * 页面的初始数据
   */
  data: {
    studentListText: '学生列表',
    tableData: [],
    studentList:[],
    listName:["学号","姓名","年级","专业"],
    totalName:["学号","姓名","年级","专业"]
  },
 async handleTableUpdate(event){
    const updatedItem = event.detail.updatedItem;
    const updateIndex = event.detail.updateIndex;
    // 更新父组件的数据
    const updatedTableList = this.data.studentList;
    updatedTableList[updateIndex] = { ...updatedTableList[updateIndex], ...updatedItem };
    //调用更新的接口
    let res = await changeStudent(updatedItem)
    if (res.code === 200) {
      // 清空数据
      this.setData({
        studentList: updatedTableList
      });
      // 弹出提示框
      wx.showToast({
          title: '修改成功', // 提示内容
          icon: 'success',   // 图标类型
          duration: 2000     // 显示时长
      });
    
  } else {
      // 处理上传失败的情况
      wx.showToast({
          title: '修改失败',
          icon: 'none',
          duration: 2000
      });
  }
  },
 async handleTableDelect(event){
    const updateIndex = event.detail.updateIndex;
    const updatedTableList = this.data.studentList; // 获取当前的 tableData
    const studentId = updatedTableList[updateIndex].studentId
    console.log("点击删除：",studentId);
    let res = await deleteStudent(studentId)
      // console.log(res);
    if (res.code === 200) {
      updatedTableList.splice(updateIndex, 1);
      // 更新状态，刷新视图
      this.setData({
        studentList: updatedTableList
      });
      // 弹出提示框
      wx.showToast({
          title: '删除成功', // 提示内容
          icon: 'success',   // 图标类型
          duration: 2000     // 显示时长
      });
    
  } else {
      // 处理上传失败的情况
      wx.showToast({
          title: '删除失败',
          icon: 'none',
          duration: 2000
      });
  }
  },
  handleDataChange(event){
  const receivedData = event.detail; // 获取子组件传递的数据
  console.log('接收到的数据:', receivedData);

  // 合并现有的 tableData 和接收到的数据
  const combinedData = [...this.data.tableData, ...receivedData];

  // 用于保存被去重的对象
  const duplicateIds = [];
  
  // 去重逻辑，确保 id 唯一
  const uniqueData1 = combinedData.filter((item, index, self) => {
    const isDuplicate = index !== self.findIndex((t) => t.studentNo === item.studentNo);
    if (isDuplicate) {
      duplicateIds.push(item); // 记录被去重的对象
    }
    return !isDuplicate; // 只保留唯一项
  });

  const studentList = this.data.studentList || [];
  console.log("studentList:",studentList);
  
  const finalUniqueData = uniqueData1.filter(item => {

    // const isDuplicateInTeacherList = teacherList.some(t => t.teacherNo === item.teacherNo);
    const isDuplicateInTeacherList = studentList.some(t => {
      // console.log(`t.teacherNo: ${t.teacherNo} -----item.teacherNo: ${item.teacherNo}`);
      console.log("555555");
      return t.studentNo === item.studentNo;
    });
    if (isDuplicateInTeacherList) {
      duplicateIds.push(item); // 记录被去除的项
    }
    return !isDuplicateInTeacherList; // 只保留不重复的项
  });
  
  
  // 更新状态，去重后的数据
  this.setData({
    tableData: finalUniqueData
  }, () => {
    // 在 setData 完成后执行的回调
    console.log("去重后的 tableData:", this.data.tableData);
  });

  if (duplicateIds.length > 0) {
    const duplicateDetails = duplicateIds.map(item => {
      const id = item.studentNo || item.teacherNo || '未知ID';
      const name = item.studentName || item.name || '未知姓名';
      const grade = item.grade || '未知年级';
      const major = item.major || '未知专业';
  
      return `ID: ${id}, 姓名: ${name}, 年级: ${grade}, 专业: ${major}`;
    }).join('\n');
  
    Dialog.alert({
      message: `由于号相同，去重的用户:\n${duplicateDetails}`
    }).then(() => {
      // 在对话框关闭后可以执行的操作
    });
  }
  },
  async handleSubmit(){
    console.log("上传的数据:",this.data.tableData);
    const res = await uploadStudentInfo(this.data.tableData)
    if (res.code === 200) {
      this.selectComponent('#myInput').submit(); 
      this.toGetStudent()
      // 清空数据
      this.setData({
          tableData: []
      });
      // 弹出提示框
      wx.showToast({
          title: '上传成功', // 提示内容
          icon: 'success',   // 图标类型
          duration: 2000     // 显示时长
      });
    
  } else {
      // 处理上传失败的情况
      wx.showToast({
          title: '上传失败',
          icon: 'none',
          duration: 2000
      });
  }
   
  },
  onSearchChange(event){
    const newValue = event.detail; // 获取新的值
    console.log("当前搜索值:", newValue); // 打印当前的值

    this.setData({
      value: newValue // 更新 data 中的 value
    });

    // 调用防抖后的搜索方法
    this.debouncedSearch(newValue);
  },
  // 防抖后的搜索方法
 async toSearch(value) {
  console.log("进行搜索:", value);
  // 这里可以放入你的搜索逻辑
  let res = await getStudentByValue(value)
  this.setData({
    studentList:res.data
  })
},
 debounce(func, wait) {
  let timeout;
  return function(...args) {
    const context = this; // 保存上下文
    clearTimeout(timeout);
    timeout = setTimeout(() => func.apply(context, args), wait);
  };
},
async toGetStudent(){
  let res = await getStudent()
  this.setData({
    studentList:res.data
  })
},
  /**
   * 生命周期函数--监听页面加载
   */
 async onLoad(options) {
   this.toGetStudent()
  // let res = await getStudent()
  // this.setData({
  //   studentList:res.data
  // })
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {
    this.debouncedSearch = this.debounce(this.toSearch.bind(this), 1000); // 1秒的防抖秒的防抖
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})